Una gu铆a completa para implementar tooltips accesibles usando estados hover y focus, garantizando la usabilidad para todos, incluidos usuarios con discapacidades.
Implementaci贸n de Tooltips: Informaci贸n Accesible con Hover y Focus
Los tooltips (o descripciones emergentes) son peque帽os mensajes de ayuda contextual que aparecen cuando un usuario sit煤a el puntero del rat贸n sobre un elemento o lo enfoca. Pueden proporcionar informaci贸n adicional, aclarar el prop贸sito de un elemento u ofrecer pistas sobre c贸mo usar una funci贸n. Sin embargo, los tooltips pueden convertirse f谩cilmente en pesadillas de accesibilidad si no se implementan correctamente. Esta gu铆a describe las mejores pr谩cticas para crear tooltips que sean utilizables por todos, incluidos los usuarios con discapacidades.
Por Qu茅 la Accesibilidad es Importante para los Tooltips
La accesibilidad no se trata solo de cumplir normativas; se trata de crear una mejor experiencia de usuario para todos. Cuando los tooltips no son accesibles, pueden excluir a los usuarios que dependen de tecnolog铆as de asistencia como lectores de pantalla, navegaci贸n por teclado o entrada de voz. Considere estos escenarios:
- Usuarios de lectores de pantalla: Si un tooltip no est谩 marcado correctamente, es posible que un lector de pantalla no anuncie su presencia o contenido.
- Usuarios de teclado: Si un tooltip solo aparece al pasar el rat贸n por encima (hover), los usuarios de teclado no podr谩n acceder a 茅l.
- Usuarios con discapacidades motoras: Los movimientos precisos del rat贸n necesarios para las interacciones de hover pueden ser dif铆ciles o imposibles.
- Usuarios con discapacidades cognitivas: Un tooltip mal sincronizado o confuso puede generar frustraci贸n y dificultar la comprensi贸n.
Al seguir las mejores pr谩cticas de accesibilidad, podemos asegurarnos de que los tooltips mejoren en lugar de obstaculizar la experiencia del usuario para todos.
Principios Clave para Tooltips Accesibles
Los siguientes principios son cruciales para crear tooltips accesibles:
- Proporcionar acceso alternativo: Asegurarse de que los tooltips sean accesibles tanto mediante hover como con el foco del teclado.
- Usar atributos ARIA: Utilizar atributos ARIA (Accessible Rich Internet Applications) para identificar y describir correctamente los tooltips a las tecnolog铆as de asistencia.
- Gestionar el foco: Controlar a d贸nde va el foco cuando se muestra y se oculta un tooltip.
- Asegurar contraste suficiente: Proporcionar suficiente contraste de color entre el texto y el fondo del tooltip.
- Permitir tiempo suficiente: Dar a los usuarios tiempo suficiente para leer el contenido del tooltip.
- Hacerlos descartables: Proporcionar una forma clara de cerrar el tooltip.
- Evitar el uso excesivo: Usar los tooltips con moderaci贸n y solo cuando sea necesario.
T茅cnicas de Implementaci贸n
1. Usando Hover y Focus
El aspecto m谩s cr铆tico de los tooltips accesibles es garantizar que sean accesibles tanto para usuarios de rat贸n como de teclado. Esto significa que el tooltip debe aparecer tanto al pasar el cursor sobre el elemento (hover) como cuando el elemento recibe el foco.
HTML:
<a href="#" aria-describedby="tooltip-example">Enlace de Ejemplo</a>
<div id="tooltip-example" role="tooltip" style="display: none;">Este es un tooltip de ejemplo.</div>
CSS:
a:hover + div[role="tooltip"],
a:focus + div[role="tooltip"] {
display: block;
position: absolute;
background-color: #f0f0f0;
border: 1px solid #ccc;
padding: 5px;
z-index: 1000; /* Asegura que el tooltip est茅 por encima */
}
Explicaci贸n:
aria-describedby: Este atributo vincula el enlace con el elemento del tooltip utilizando su ID. Esto informa a las tecnolog铆as de asistencia que el tooltip proporciona informaci贸n adicional sobre el enlace.role="tooltip": Este rol de ARIA identifica el elemento como un tooltip.- El CSS utiliza el selector de hermano adyacente (
+) para mostrar el tooltip cuando el enlace recibe un hover o un focus.
JavaScript (Control Avanzado - Opcional):
Aunque el CSS puede manejar un simple mostrar/ocultar, JavaScript permite un control m谩s robusto, especialmente cuando los tooltips se generan din谩micamente o necesitan un comportamiento m谩s complejo.
const link = document.querySelector('a[aria-describedby="tooltip-example"]');
const tooltip = document.getElementById('tooltip-example');
link.addEventListener('focus', () => {
tooltip.style.display = 'block';
});
link.addEventListener('blur', () => {
tooltip.style.display = 'none';
});
link.addEventListener('mouseover', () => {
tooltip.style.display = 'block';
});
link.addEventListener('mouseout', () => {
tooltip.style.display = 'none';
});
2. Usando Atributos ARIA
Los atributos ARIA son esenciales para proporcionar informaci贸n sem谩ntica a las tecnolog铆as de asistencia. Aqu铆 hay un desglose de los atributos clave:
aria-describedby: Como se mencion贸 anteriormente, este atributo establece la relaci贸n entre el elemento desencadenante y el elemento del tooltip.role="tooltip": Este atributo define expl铆citamente el elemento como un tooltip.aria-hidden="true"/aria-hidden="false": 脷selos para indicar si el tooltip est谩 actualmente visible para las tecnolog铆as de asistencia. Cuando el tooltip est谩 oculto, establezcaaria-hidden="true". Cuando es visible, establezcaaria-hidden="false". Esto es particularmente importante cuando se usa JavaScript para controlar la visibilidad del tooltip.
Ejemplo:
<button aria-describedby="help-tooltip">Enviar</button>
<div id="help-tooltip" role="tooltip" aria-hidden="true">Haga clic aqu铆 para enviar el formulario.</div>
JavaScript (para aria-hidden):
const button = document.querySelector('button[aria-describedby="help-tooltip"]');
const tooltip = document.getElementById('help-tooltip');
button.addEventListener('focus', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('blur', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
button.addEventListener('mouseover', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('mouseout', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
3. Gestionando el Foco
Cuando aparece un tooltip, generalmente *no debe* robar el foco del elemento desencadenante. El foco debe permanecer en el elemento que activ贸 el tooltip. Esto asegura que los usuarios de teclado puedan continuar navegando por la p谩gina sin interrupciones inesperadas.
Sin embargo, puede haber situaciones en las que *desee* mover el foco al tooltip, particularmente si el tooltip contiene elementos interactivos (por ejemplo, enlaces, botones). En este caso, aseg煤rese de que:
- El tooltip sea visualmente distinto para indicar que tiene el foco.
- Haya una forma clara de devolver el foco al elemento desencadenante original (por ejemplo, un bot贸n de cierre dentro del tooltip).
En la mayor铆a de los casos, se prefiere evitar la gesti贸n del foco dentro del propio tooltip por simplicidad y usabilidad.
4. Asegurando Contraste Suficiente
El contraste de color es crucial para la legibilidad. Aseg煤rese de que el color del texto en sus tooltips tenga suficiente contraste con el color de fondo. Las Pautas de Accesibilidad al Contenido Web (WCAG) recomiendan una relaci贸n de contraste de al menos 4.5:1 para texto normal y 3:1 para texto grande (18pt o 14pt en negrita).
Utilice verificadores de contraste en l铆nea para confirmar que sus elecciones de color cumplen con los est谩ndares de accesibilidad. Ejemplos de verificadores de contraste incluyen:
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- Coolors: https://coolors.co/contrast-checker
Ejemplo (Buen Contraste):
.tooltip {
background-color: #000;
color: #fff;
}
Ejemplo (Contraste Pobre):
.tooltip {
background-color: #fff;
color: #eee;
}
5. Permitiendo Tiempo Suficiente
Los usuarios necesitan tiempo suficiente para leer el contenido del tooltip. Evite los tooltips que desaparecen demasiado r谩pido. Si bien no hay un n煤mero m谩gico, apunte a un tiempo m铆nimo de visualizaci贸n de unos pocos segundos. Adem谩s, el tooltip debe permanecer visible mientras el usuario mantenga el cursor sobre el elemento desencadenante o lo tenga enfocado. Si necesita cerrar el tooltip debido a otros eventos, proporcione un indicador de que el tooltip se cerrar谩.
Si el contenido del tooltip es extenso, considere proporcionar una forma para que el usuario lo descarte manualmente (por ejemplo, un bot贸n de cierre o presionando la tecla Escape).
6. Haci茅ndolos Descartables
Aunque los tooltips a menudo desaparecen autom谩ticamente cuando el usuario aleja el rat贸n o quita el foco, es una buena pr谩ctica proporcionar una forma clara de descartarlos manualmente, especialmente para tooltips largos o que contienen elementos interactivos.
M茅todos para Descartar Tooltips:
- Bot贸n de cierre: Incluya un bot贸n de cierre visualmente prominente dentro del tooltip.
- Tecla Escape: Permita a los usuarios descartar el tooltip presionando la tecla Escape.
- Clic afuera: Descarte el tooltip cuando el usuario haga clic en cualquier lugar fuera del tooltip y del elemento desencadenante. (脷selo con precauci贸n, ya que puede ser disruptivo).
Ejemplo (Bot贸n de Cierre):
<div id="my-tooltip" role="tooltip" aria-hidden="true">
Este es el contenido de mi tooltip.
<button onclick="hideTooltip()">Cerrar</button>
</div>
Ejemplo (Tecla Escape):
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
hideTooltip(); // Reemplace con su funci贸n real para ocultar el tooltip
}
});
7. Evitando el Uso Excesivo
Los tooltips deben usarse con moderaci贸n y solo cuando proporcionan informaci贸n verdaderamente 煤til. El uso excesivo de tooltips puede saturar la interfaz, distraer a los usuarios y crear una experiencia frustrante.
Alternativas a los Tooltips:
- Etiquetas claras: Use etiquetas claras y descriptivas para campos de formulario, botones y enlaces.
- Ayuda contextual: Proporcione texto de ayuda directamente en la interfaz, cerca de los elementos relevantes.
- Documentaci贸n de ayuda: Enlace a documentaci贸n de ayuda completa para funciones m谩s complejas.
Consideraciones Avanzadas
Contenido Din谩mico
Si el contenido de su tooltip se genera din谩micamente (por ejemplo, se carga desde una API o se actualiza seg煤n la entrada del usuario), aseg煤rese de que el atributo aria-describedby y la visibilidad del tooltip se actualicen en consecuencia. Use JavaScript para gestionar estas actualizaciones.
Posicionamiento
Considere cuidadosamente el posicionamiento de sus tooltips. Evite colocarlos de manera que oculten contenido importante o causen cambios en el dise帽o. Tenga en cuenta los diferentes tama帽os de pantalla y resoluciones, y use CSS para asegurarse de que los tooltips est茅n siempre visibles dentro del viewport.
Dispositivos M贸viles
Los tooltips tradicionalmente dependen de interacciones de hover, que no est谩n disponibles en dispositivos t谩ctiles. Para dispositivos m贸viles, considere usar m茅todos de interacci贸n alternativos, como:
- Toque (Tap): Muestre el tooltip cuando el usuario toque el elemento.
- Pulsaci贸n larga (Long press): Muestre el tooltip cuando el usuario mantenga presionado el elemento.
- Mostrar al enfocar (Show on focus): Muestre el tooltip cuando el elemento reciba el foco. Esto se puede lograr con JavaScript, verificando el soporte t谩ctil (por ejemplo, `('ontouchstart' in window)`) y alterando el comportamiento de visualizaci贸n en consecuencia.
Probando tus Tooltips
Pruebe exhaustivamente sus tooltips para asegurarse de que sean accesibles para todos los usuarios. Use una combinaci贸n de pruebas manuales y herramientas de prueba de accesibilidad automatizadas.
M茅todos de Prueba:
- Navegaci贸n por teclado: Verifique que los tooltips sean accesibles usando el teclado.
- Pruebas con lector de pantalla: Use un lector de pantalla para asegurarse de que los tooltips se anuncien correctamente.
- An谩lisis de contraste de color: Use un verificador de contraste de color para verificar que sea suficiente.
- Pruebas en m贸viles: Pruebe los tooltips en diferentes dispositivos m贸viles y tama帽os de pantalla.
- Pruebas de accesibilidad automatizadas: Use herramientas como axe DevTools, WAVE o Lighthouse para identificar posibles problemas de accesibilidad.
Internacionalizaci贸n (i18n) y Localizaci贸n (l10n)
Al desarrollar tooltips para una audiencia global, tenga en cuenta la internacionalizaci贸n y la localizaci贸n:
- Direcci贸n del texto: Admita direcciones de texto de izquierda a derecha (LTR) y de derecha a izquierda (RTL). Use propiedades l贸gicas de CSS (por ejemplo, `margin-inline-start`, `margin-inline-end`) en lugar de propiedades f铆sicas (por ejemplo, `margin-left`, `margin-right`) para el dise帽o.
- Traducciones espec铆ficas del idioma: Proporcione traducciones del contenido del tooltip para diferentes idiomas.
- Formatos de fecha y hora: Adapte los formatos de fecha y hora a la configuraci贸n regional del usuario.
- Formatos de n煤mero: Use formatos de n煤mero apropiados para diferentes regiones (por ejemplo, separadores decimales, separadores de miles).
Conclusi贸n
Implementar tooltips accesibles requiere una planificaci贸n cuidadosa y atenci贸n al detalle. Al seguir los principios y t茅cnicas descritos en esta gu铆a, puede crear tooltips que sean utilizables por todos, independientemente de sus habilidades. Recuerde que la accesibilidad es un proceso continuo, as铆 que contin煤e probando y refinando sus tooltips para asegurarse de que satisfagan las necesidades de todos sus usuarios.